package offer.day11;

public class No16power {
    /*
     * 面试题16：数值的整数次方
     * 题目：实现函数double Power（double base,int exponent），求base的exponent次方。
     * 		不得使用库函数，同时不需要考虑大数问题。
     *
     * 思路：因该多考虑输入的情况，避免遗漏
     * 		先判断基数base的取值：
     * 			base == 0   等于0时，无意义，错误处理方法使用返回值方法，直接返回0
     * 			base ！= 0 不等于0时，考虑指数exponent的取值情况即可
     * 		再判断指数exponent的取值：
     * 			exponent == 0 等于0时，任何输的0次方都为1 ，返回1.0即可
     * 			exponent > 0  大于0时，直接做power运算--次方运算即可
     * 			exponent < 0 小于0时，先将base取倒，再将exponent取负，在进行power运算--次方运算即可
     * */

    public static void main(String[] args) {
        int exponent=-1;
        double base=2;
        System.out.println(Power(base,exponent));
    }

    public static double Power(double base,int exponent){
        if(base==0){
            return 0;
        }else{
            if(exponent==0){
                return 1.0;
            }else if(exponent>0){
                double r=Power(base,exponent/2);
                if((exponent&1)==1){
                    return r*r*base;
                }else{
                    return r*r;
                }
            }else{
                return Power(1/base,-exponent);
            }
        }
    }
}
